package model.bean;

import it.mrcrack.exception.DataFormatException;
import it.mrcrack.exception.DataNotSetException;

import java.io.Serializable;
import java.util.GregorianCalendar;

/**
 * Bean che incapsula una misura
 * @author MrCrack
 *
 */
public class Misura implements Serializable{
	public Misura() {
		super();
		errore = -1;
	}
	public GregorianCalendar getOra() {
		return (ora==null ? null : (GregorianCalendar)ora.clone());
	}
	public void setOra(GregorianCalendar ora) throws DataFormatException {
		if(ora==null)
			throw new DataFormatException("L'ora della misura non puo' essere null");
		this.ora = (GregorianCalendar)ora.clone();
	}
	public long getDurata() {
		return durata;
	}
	public void setDurata(long durata) throws DataFormatException {
		if(durata<1)
			throw new DataFormatException("La durata della misura non puo' essere minore di 1");
		this.durata = durata;
	}
	public double getMisura() {
		return misura;
	}
	public void setMisura(double misura) throws DataFormatException {
		if(misura<1)
			throw new DataFormatException("La misura della misura non puo' essere minore di 1");
		this.misura = misura;
	}
	public double getErrore() {
		return errore;
	}
	public void setErrore(double errore) throws DataFormatException {
		if(errore<0)
			throw new DataFormatException("L'errore della misura non puo' essere minore di 0");
		this.errore = errore;
	}
	public Sensore getSensore() {
		return sensore;
	}
	public void setSensore(Sensore sensore) throws DataNotSetException {
		if(sensore==null)
			throw new NullPointerException("Il sensore passato non puo' essere null");
		if(!sensore.impostato())
			throw new DataNotSetException("Il sensore passato non e' settato");
		this.sensore = sensore;
	}
	/**
	 * 
	 * @return true se la misura e' stata totalmente settata, false altrimenti
	 */
	public boolean impostato(){
		boolean flag=true;
		if(ora==null || durata==-1 || misura==-1 || errore==-1 || sensore==null)
			flag=false;
		return flag;
	}
	private GregorianCalendar ora;
	private long durata;
	private double misura, errore;
	private Sensore sensore;
	private static final long serialVersionUID = -2040460164227925413L;
}